<?php

declare(strict_types=1);

namespace app\model;

use think\model\concern\SoftDelete;

/**
 * 
 *
 * @mixin \think\Model
 * @property int $id 自增 id
 * @property int $agent_id 代理商id
 * @property int $user_id 用户id
 * @property int $channel_id 渠道id
 * @property int $order_id 订单号
 * @property string $supplier_order_id 供应商订单号：守兔影票订单号
 * @property int $film_id 影片id
 * @property string $film_image 海报URL地址
 * @property string $film_name 影片名
 * @property string $show_time 放映时间
 * @property int $duration 时长,分钟
 * @property string $end_time 散场时间
 * @property string $hall_name 影厅名称
 * @property string $seats_str 座位
 * @property int $cinema_id 影院id
 * @property string $cinema_name 影院名称
 * @property int $accept_change_seat 是否允许调座，1-允许，0-不允许
 * @property string $mobile 手机号码
 * @property int $status 支付状态：1待支付 2已支付 3已取消 4支付失败
 * @property int $supplier_status 订单状态：1待下单 2-受理中，3-待出票，4-已出票待结算，5-已结算【守兔】10-订单关闭
 * @property int $order_num 座位数
 * @property int $total_net_price 市场价总价。单位：分
 * @property int $sale_price 销售价格。单位：分
 * @property int $commission_rate 代理商返佣比例（%）
 * @property int $supplier_price 供应商价格。单位：分
 * @property int $platform_profit 平台利润。单位：分
 * @property int $profit 代理商利润。单位：分
 * @property int $pay_time 支付时间
 * @property int $close_time 关闭时间
 * @property string $close_cause 关闭原因
 * @property int $refund_status 退款状态：1无需退款 2待退款 3退款成功
 * @property int $refund_amount 退款金额。单位：分
 * @property string $real_seat 实际出票座位，仅供参考，可能与票不一样，也可能为空，一般当实际座位与下单座位不一样时会有。
 * @property string $ticket_code 取票码字符串
 * @property string $ticket_image 取票码原始截图
 * @property int $settle_time 结算时间
 * @property int $settle_type 结算方式：1返佣 2预付
 * @property string $updated_at 更新时间
 * @property string $created_at 创建时间
 * @property string $remark 备注
 * @property int $settle_status 结算状态：1无需结算 2待结算 3已结算
 * @property int $order_from 订单来源：1H5 2API
 * @property int $supplier_id 供应商id【mobile_supplier 表的id】
 * @property int $finish_time 完成时间
 * @property string $out_order_id 代理商接口订单号
 * @property string $notify_url 订单状态回调地址
 * @property-read \app\model\BaseSupplier $supplier
 * @property-read \app\model\MobileUser $user
 * @property string $plan_type 语言和2、3D
 * @property string $sid 自定义标记信息
 * @property-read \app\model\CouponOrder $coupon_order
 * @property-read mixed $settle_time_text
 * @property-read mixed $channel_name
 */
class MovieOrder extends CommonModel
{
    public $table = 'movie_order';

    /**
     * 供应商状态
     */
    const SUPPLIER_STATUS_WIAT = 1; //待下单
    const SUPPLIER_STATUS_PROCESSING = 2; //进行中
    const SUPPLIER_STATUS_WAIT_TICKETING = 3; //待出票
    const SUPPLIER_STATUS_WAIT_SETTLEMENT = 4;  //已出票待结算
    const SUPPLIER_STATUS_SETTLEMENT = 5;  //已结算
    const SUPPLIER_STATUS_CLOSE = 10;  //关闭


    /**
     * 充值成功的状态
     */
    const SUPPLIER_STATUS_IS_OK = [
        self::SUPPLIER_STATUS_PROCESSING,
        self::SUPPLIER_STATUS_WAIT_TICKETING,
        self::SUPPLIER_STATUS_WAIT_SETTLEMENT,
        self::SUPPLIER_STATUS_SETTLEMENT,
    ];


    /**
     * 结算状态
     */

    const SETTLE_STATUS_NO = 1; //无需结算
    const SETTLE_STATUS_WAIT = 2; //待结算
    const SETTLE_STATUS_FINISH = 3;  //结算完成



    const STATUS_PAY = 2;

    //影票短信加密长度
    const PASSKEY_LENGTH = 6;

    //影票短信加密盐值
    const PASSKEY_SALT = 'movieOrder';


    // 定义全局的查询范围
    protected $globalScope = ['agentId'];

    public function supplier()
    {
        return $this->belongsTo(BaseSupplier::class, 'supplier_id');
    }

    public function user()
    {
        return $this->hasOne(MobileUser::class, 'id', 'user_id');
    }

    public function couponOrder()
    {
        return $this->hasOne(CouponOrder::class, 'quote_id', 'id');
    }


    public function getSettleTimeTextAttr($value,$model)
    {
        if ($model['settle_time'] != 0 && $model['settle_time'] != null) {
            return date('Y-m-d H:i:s',$model['settle_time']);
        }
    }

    public function getChannelNameAttr($value,$model)
    {
        return AgentChannel::query()->where('id', $model['channel_id'])->value('name');
    }
}
